/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * DatosEstudioLaboratorioPanel.java
 *
 * Created on 27/01/2011, 13:04:34
 */

package presentacion.tratamiento_y_practica;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.ProfesionalTratamientoQuirurgico;
import hibernate.objeto.TratamientoQuirurgico;
import java.awt.Component;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.SpinnerDateModel;
import logica.CapaLogica;
import logica.ProfesionalTratamientoQuirurgicoLogica;
import logica.TratamientoQuirurgicoLogica;
import logica.validacion.CapaValidacion;
import presentacion.CapaPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;

/**
 *
 * @author Gonzalo
 */
public class DatosTratamientoQuirurgicoPanel extends javax.swing.JPanel {

    /** Creates new form DatosEstudioLaboratorioPanel */
    public DatosTratamientoQuirurgicoPanel(TratamientoQuirurgico
            tratamientoQuirurgico) {
        this.tratamientoQuirurgico = tratamientoQuirurgico;
        initComponents();
        setearEventosQueCapturanTeclaEnterYEscape();
        if (tratamientoQuirurgico != null) {
            personalizarJDialog();
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelTratamientoQuirurgico = new javax.swing.JPanel();
        textoDescripcion = new javax.swing.JLabel();
        ComentariosDescripcionScrollPane = new javax.swing.JScrollPane();
        descripcion = new javax.swing.JTextArea();
        panelProfesionalesScrollPane = new javax.swing.JScrollPane();
        panelProfesionales = new javax.swing.JPanel();
        textoProfesionales = new javax.swing.JLabel();
        textoHoraYFechaInicio = new javax.swing.JLabel();
        SpinnerDateModel spinerModel = new SpinnerDateModel(new Date(0, 0, 0, Calendar.HOUR_OF_DAY, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaInicio = new javax.swing.JSpinner(spinerModel);
        fechaInicio = new com.toedter.calendar.JDateChooser();
        textoHoraYFechaFin = new javax.swing.JLabel();
        spinerModel = new SpinnerDateModel(new Date(0, 0, 0, Calendar.HOUR_OF_DAY, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaFin = new javax.swing.JSpinner(spinerModel);
        fechaFin = new com.toedter.calendar.JDateChooser();
        textoUrgente = new javax.swing.JLabel();
        textoNumeroQuirofano = new javax.swing.JLabel();
        numeroQuirofano = new javax.swing.JSpinner();
        siUrgente = new javax.swing.JRadioButton();
        noUrgente = new javax.swing.JRadioButton();
        agregarProfesionalesBoton = new javax.swing.JButton();

        panelTratamientoQuirurgico.setPreferredSize(new java.awt.Dimension(421, 495));
        panelTratamientoQuirurgico.setRequestFocusEnabled(false);
        panelTratamientoQuirurgico.setVerifyInputWhenFocusTarget(false);

        textoDescripcion.setFont(Fuente.FUENTE_LABEL);
        textoDescripcion.setForeground(Fuente.COLOR_NORMAL);
        textoDescripcion.setText("Descripción");
        textoDescripcion.setPreferredSize(new java.awt.Dimension(95, 20));

        ComentariosDescripcionScrollPane.setPreferredSize(new java.awt.Dimension(218, 50));

        descripcion.setColumns(19);
        descripcion.setFont(Fuente.FUENTE_TEXTFIELD);
        descripcion.setRows(2);
        ComentariosDescripcionScrollPane.setViewportView(descripcion);

        panelProfesionalesScrollPane.setBorder(null);
        panelProfesionalesScrollPane.setPreferredSize(new java.awt.Dimension(432, 177));

        panelProfesionales.setLayout(new javax.swing.BoxLayout(panelProfesionales, javax.swing.BoxLayout.Y_AXIS));
        panelProfesionalesScrollPane.setViewportView(panelProfesionales);

        textoProfesionales.setFont(Fuente.FUENTE_LABEL);
        textoProfesionales.setForeground(Fuente.COLOR_NORMAL);
        textoProfesionales.setText("Profesionales");
        textoProfesionales.setPreferredSize(new java.awt.Dimension(70, 20));

        textoHoraYFechaInicio.setFont(Fuente.FUENTE_LABEL);
        textoHoraYFechaInicio.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYFechaInicio.setText("Hora y fecha inicio");
        textoHoraYFechaInicio.setPreferredSize(new java.awt.Dimension(95, 20));

        JSpinner.DateEditor horaDeMuerte = new JSpinner.DateEditor(horaInicio, "HH:mm:ss");
        horaInicio.setEditor(horaDeMuerte);
        horaInicio.setFont(Fuente.FUENTE_TEXTFIELD);
        horaInicio.setPreferredSize(new java.awt.Dimension(128, 20));

        fechaInicio.setToolTipText("");
        fechaInicio.setDate(new Date());
        fechaInicio.setMaxSelectableDate(new Date());
        fechaInicio.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaInicio.setPreferredSize(new java.awt.Dimension(144, 20));

        textoHoraYFechaFin.setFont(Fuente.FUENTE_LABEL);
        textoHoraYFechaFin.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYFechaFin.setText("Hora y fecha fin");
        textoHoraYFechaFin.setPreferredSize(new java.awt.Dimension(95, 20));

        horaDeMuerte = new JSpinner.DateEditor(horaInicio, "HH:mm:ss");
        horaFin.setEditor(horaDeMuerte);
        horaFin.setFont(Fuente.FUENTE_TEXTFIELD);
        horaFin.setPreferredSize(new java.awt.Dimension(64, 20));

        fechaFin.setToolTipText("");
        fechaFin.setDate(new Date());
        fechaFin.setMaxSelectableDate(new Date());
        fechaFin.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaFin.setPreferredSize(new java.awt.Dimension(144, 20));

        textoUrgente.setFont(Fuente.FUENTE_LABEL);
        textoUrgente.setForeground(Fuente.COLOR_NORMAL);
        textoUrgente.setText("Urgente");
        textoUrgente.setPreferredSize(new java.awt.Dimension(95, 20));

        textoNumeroQuirofano.setFont(Fuente.FUENTE_LABEL);
        textoNumeroQuirofano.setForeground(Fuente.COLOR_NORMAL);
        textoNumeroQuirofano.setText("Número quirófano");
        textoNumeroQuirofano.setPreferredSize(new java.awt.Dimension(95, 20));

        numeroQuirofano.setFont(Fuente.FUENTE_TEXTFIELD);
        numeroQuirofano.setPreferredSize(new java.awt.Dimension(70, 20));

        siUrgente.setFont(Fuente.FUENTE_CHECKBOX);
        siUrgente.setForeground(Fuente.COLOR_NORMAL);
        siUrgente.setText("si");
        siUrgente.setPreferredSize(new java.awt.Dimension(42, 20));
        siUrgente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                siUrgenteActionPerformed(evt);
            }
        });

        noUrgente.setFont(Fuente.FUENTE_CHECKBOX);
        noUrgente.setForeground(Fuente.COLOR_NORMAL);
        noUrgente.setText("no");
        noUrgente.setPreferredSize(new java.awt.Dimension(55, 20));
        noUrgente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                noUrgenteActionPerformed(evt);
            }
        });

        agregarProfesionalesBoton.setFont(Fuente.FUENTE_BOTON_INTERNO);
        agregarProfesionalesBoton.setIcon(Icono.ICONO_16_AGREGAR);
        agregarProfesionalesBoton.setMnemonic('a');
        agregarProfesionalesBoton.setText("Agregar profesional");
        agregarProfesionalesBoton.setToolTipText("Agrega un análisis según el nombre del anális y el tipo");
        agregarProfesionalesBoton.setPreferredSize(new java.awt.Dimension(175, 20));
        agregarProfesionalesBoton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                agregarProfesionalesBotonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelTratamientoQuirurgicoLayout = new javax.swing.GroupLayout(panelTratamientoQuirurgico);
        panelTratamientoQuirurgico.setLayout(panelTratamientoQuirurgicoLayout);
        panelTratamientoQuirurgicoLayout.setHorizontalGroup(
            panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelTratamientoQuirurgicoLayout.createSequentialGroup()
                .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(textoProfesionales, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textoDescripcion, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textoHoraYFechaInicio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelTratamientoQuirurgicoLayout.createSequentialGroup()
                        .addComponent(horaInicio, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(fechaInicio, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(ComentariosDescripcionScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(agregarProfesionalesBoton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(panelTratamientoQuirurgicoLayout.createSequentialGroup()
                        .addComponent(textoHoraYFechaFin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(horaFin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelTratamientoQuirurgicoLayout.createSequentialGroup()
                        .addComponent(textoNumeroQuirofano, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(numeroQuirofano, 0, 0, Short.MAX_VALUE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelTratamientoQuirurgicoLayout.createSequentialGroup()
                        .addComponent(textoUrgente, 0, 0, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(siUrgente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(noUrgente, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(fechaFin, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(298, 298, 298))
            .addGroup(panelTratamientoQuirurgicoLayout.createSequentialGroup()
                .addComponent(panelProfesionalesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 366, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(496, Short.MAX_VALUE))
        );
        panelTratamientoQuirurgicoLayout.setVerticalGroup(
            panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTratamientoQuirurgicoLayout.createSequentialGroup()
                .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(horaInicio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(textoHoraYFechaFin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(horaFin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(textoHoraYFechaInicio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(fechaInicio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(fechaFin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(textoNumeroQuirofano, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(numeroQuirofano, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoUrgente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(noUrgente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(siUrgente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(ComentariosDescripcionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(textoDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelTratamientoQuirurgicoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoProfesionales, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(agregarProfesionalesBoton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelProfesionalesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(61, 61, 61))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(panelTratamientoQuirurgico, javax.swing.GroupLayout.PREFERRED_SIZE, 862, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(panelTratamientoQuirurgico, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void agregarProfesionalesBotonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_agregarProfesionalesBotonActionPerformed
        agregarProfesionales();
}//GEN-LAST:event_agregarProfesionalesBotonActionPerformed

    private void siUrgenteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_siUrgenteActionPerformed
        if (siUrgente.isSelected()) {
            noUrgente.setSelected(false);
        }
}//GEN-LAST:event_siUrgenteActionPerformed

    private void noUrgenteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_noUrgenteActionPerformed
        if (noUrgente.isSelected()) {
            siUrgente.setSelected(false);
        }
}//GEN-LAST:event_noUrgenteActionPerformed

    /**
     * Agrega profesionales a un tratamiento quirúrgico.
     */
    private void agregarProfesionales() {
            agregarPanel(panelProfesionales,
                new DatosProfesionalesPanel(null));
            agregarProfesionalesBoton.setForeground(Fuente.COLOR_NORMAL);
            agregarProfesionalesBoton.setToolTipText(null);
    }

     /**
     * Agrega un panel a un panel.
     *
     * @param panelContenedor El panel que contiene al panel que se agregará
     * @param panelComponente El panel componente que se agregará
     */
    private void agregarPanel(JPanel panelContenedor, JPanel panelComponente) {
        panelContenedor.add(panelComponente);
        panelContenedor.revalidate();
        panelContenedor.repaint();
    }

    /**
     * Realiza la validación de los datos
     *
     * @return true si esta listo para cargarse, false en caso contrario
     */
    public boolean validarCamposTratamientoQuirurgico() {
        boolean esHoraYFechaInicioValida = validarCampoHoraYFechaInicio();
        boolean esHoraYFechaFinValida = validarCampoHoraYFechaFin();
        boolean esProfesionalesValido = validarCamposProfesionales();

        return esHoraYFechaInicioValida && esHoraYFechaFinValida
                && esProfesionalesValido;
    }

    /**
     * Valida los campos correspondiente al campo Hora y Fecha inicio.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCampoHoraYFechaInicio() {
        //Manejo de la validación de fecha
        if (!CapaValidacion.validarFecha(
                fechaInicio.getDate(), null, true)) {
            textoHoraYFechaInicio.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYFechaInicio.setToolTipText(InformeError.INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            return false;
        } else {
            textoHoraYFechaInicio.setForeground(
                    Fuente.COLOR_NORMAL);
            textoHoraYFechaInicio.setToolTipText(null);
            return true;
        }
    }

    /**
     * Valida los campos correspondiente al campo Hora y Fecha inicio.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCampoHoraYFechaFin() {
        //Manejo de la validación de fecha
        if (!CapaValidacion.validarFecha(
                fechaFin.getDate(), null, true)) {
            textoHoraYFechaFin.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYFechaFin.setToolTipText(InformeError.INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            return false;
        } else {
            textoHoraYFechaFin.setForeground(
                    Fuente.COLOR_NORMAL);
            textoHoraYFechaFin.setToolTipText(null);
            return true;
        }
    }

    

    /**
     * Valida los campos correspondiente a los campos de profesionales.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposProfesionales() {
        boolean retorno = true;
        int paneles = panelProfesionales.getComponents().length;

        if (paneles == 0) {
            textoProfesionales.setForeground(Fuente.COLOR_NORMAL);
                textoProfesionales.setToolTipText(null);
            return true;
        } else {
            for (int i = 0; i < paneles; i++) {
                if (!((DatosProfesionalesPanel)
                        panelProfesionales.
                        getComponents()[i]).validarCampos()) {
                    retorno = false;
                    textoProfesionales.setForeground(Fuente.COLOR_ERROR);
                    textoProfesionales.
                            setToolTipText(InformeError.
                            INFORME_ERROR_TRATAMIENTO_PROFESIONALES_NO_VALIDOS);
                }
            }
        }
        if(retorno) {
                textoProfesionales.setForeground(Fuente.COLOR_NORMAL);
                textoProfesionales.setToolTipText(null);
                retorno = true;
            }
        return retorno;
    }

    /**
     * Agrega un tratamiento quirúrgico.
     *
     * @return true si se agregó correctamente, false en caso contrario.
     */
    public boolean agregarTratamientoQuirurgico(int[] idObjetoCreado) {
            //Carga toda la información de la pantalla
            recopilarDatos();
            //Agrega el tratamiento quirúrgico
            if ((TratamientoQuirurgicoLogica.agregarTratamientoQuirurgico(
                    datosGeneralTratamientQuirurgico,
                    datosProfesionalesTratamientoQuirurgico,
                    new TratamientoQuirurgico(), idObjetoCreado))) {
                return true;
            } else {
                return false;
            }
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     *
     */
    private void recopilarDatos() {
        recopilarDatosGeneral();
        recopilarDatosComponentesProfesionales();
    }

    /**
     * Recopila toda la informacion ingresada en ventana principal de laboratorio.
     *
     */
    private void recopilarDatosGeneral() {
        datosGeneralTratamientQuirurgico = new Object[7];
        
        datosGeneralTratamientQuirurgico[CapaLogica.
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_HORA_INICIO] =
                CapaLogica.separarTiempo(
                horaInicio.getValue().toString());
        
        datosGeneralTratamientQuirurgico[CapaLogica.
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_FECHA_INICIO] =
                fechaInicio.getDate();
        
        datosGeneralTratamientQuirurgico[CapaLogica.
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_HORA_FIN] =
                CapaLogica.separarTiempo(
                horaFin.getValue().toString());
        
        datosGeneralTratamientQuirurgico[CapaLogica.
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_FECHA_FIN] =
                fechaFin.getDate();
        
        datosGeneralTratamientQuirurgico[CapaLogica.
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_NUMERO_QUIROFANO] =
                numeroQuirofano.getValue();
        
        if (siUrgente.isSelected()) {
            datosGeneralTratamientQuirurgico[CapaLogica.
                    TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_URGENTE] =
                    "si";
        } else {
            datosGeneralTratamientQuirurgico[CapaLogica.
                    TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_URGENTE] =
                    "no";
        }
        
        datosGeneralTratamientQuirurgico[CapaLogica.
                TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_DESCRIPCION] =
                descripcion.getText();
    }

    /**
     * Recopila toda la informacion ingresada en cada panel de Profesionales.
     *
     */
    private void recopilarDatosComponentesProfesionales() {
        Component[] componentesProfesionales =
                panelProfesionales.getComponents();

        datosProfesionalesTratamientoQuirurgico =
                new Object[componentesProfesionales.length][2];

        for (int i = 0; i < componentesProfesionales.length; i++) {
            //Nombre
            datosProfesionalesTratamientoQuirurgico[i][
                    CapaLogica.
                    TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_NOMBRE_PROFESIONAL] =
                    ((DatosProfesionalesPanel)
                    componentesProfesionales[i]).getNombre();

            //Apellido
            datosProfesionalesTratamientoQuirurgico[i][
                    CapaLogica.
                    TRATAMIENTO_Y_PRACTICA_TRATAMIENTO_QUIRURGICO_APELLIDO_PROFESIONAL] =
                    ((DatosProfesionalesPanel)
                    componentesProfesionales[i]).getApellido();
        }
    }

    /**
     * Setea datos de la ventana.
     *
     */
    public void personalizarJDialog() {
        horaInicio.getModel().setValue(new Date());
        fechaInicio.setDate(new Date());
        horaFin.getModel().setValue(new Date());
        fechaFin.setDate(new Date());

        if (tratamientoQuirurgico != null) {
            exhibirDatosEnPantalla();
            if(CapaPresentacion.modoVisualizacion) {
                inhabilitarCampos();
            }
            personalizarJPanels();
        }
    }

    /**
     * Permite visualizar los detalles.
     *
     */
    private void exhibirDatosEnPantalla() {
        String horaEnString = tratamientoQuirurgico.
                getHoraInicioTratamientoQuirurgico();
        horaInicio.getModel().setValue(new Date(0, 0, 0,
                CapaLogica.separarHoras(horaEnString),
                CapaLogica.separarMinutos(horaEnString),
                CapaLogica.separarSegundos(horaEnString)));
        horaEnString = tratamientoQuirurgico.
                getHoraFinTratamientoQuirurgico();
        horaFin.getModel().setValue(new Date(0, 0, 0,
                CapaLogica.separarHoras(horaEnString),
                CapaLogica.separarMinutos(horaEnString),
                CapaLogica.separarSegundos(horaEnString)));
        fechaInicio.setDate(tratamientoQuirurgico.
                getFechaInicioTratamientoQuirurgico());
        fechaFin.setDate(tratamientoQuirurgico.
                getFechaFinTratamientoQuirurgico());
        numeroQuirofano.setValue(tratamientoQuirurgico.
                getNumeroQuirofanoTratamientoQuirurgico());
        if (tratamientoQuirurgico.getUrgenteTratamientoQuirurgico().
                equalsIgnoreCase("si")) {
            siUrgente.setSelected(true);
        } else {
            noUrgente.setSelected(true);
        }
        descripcion.setText(tratamientoQuirurgico.
                getDescripcionTratamientoQuirurgico());
        descripcion.setCaretPosition(0);
    }

    /**
     * Pone en false la propiedad enabled de todos los campos de ingreso.
     *
     */
    private void inhabilitarCampos() {
        horaInicio.setEnabled(false);
        horaFin.setEnabled(false);
        fechaInicio.setEnabled(false);
        fechaFin.setEnabled(false);
        numeroQuirofano.setEnabled(false);
        siUrgente.setEnabled(false);
        noUrgente.setEnabled(false);
        descripcion.setEnabled(false);
        agregarProfesionalesBoton.setVisible(false);
    }

    /**
     * Personaliza los JPanels según el tipo de estudio.
     */
    private void personalizarJPanels() {
        Vector<ProfesionalTratamientoQuirurgico>
                vectorProfesionalTratamientoQuirurgicos =
                ProfesionalTratamientoQuirurgicoLogica.
                getVectorProfesionalTratamientoQuirurgicoPorIdTratamientoQuirurgico(
                tratamientoQuirurgico.getIdTratamientoQuirurgico());
        if (vectorProfesionalTratamientoQuirurgicos != null) {
            for (int i = 0; i < vectorProfesionalTratamientoQuirurgicos.size(); i++) {
                agregarPanel(panelProfesionales,
                        new DatosProfesionalesPanel(
                        vectorProfesionalTratamientoQuirurgicos.elementAt(i)));
            }
        }
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    cerrarVentana();
                }
            }
        };

        //Setear eventos
        ((DefaultEditor) horaFin.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);
        ((DefaultEditor) horaInicio.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);
        ((IDateEditor) fechaFin.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);
        ((IDateEditor) fechaInicio.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);
        descripcion.addKeyListener(keyListenerEscape);
        ((DefaultEditor) numeroQuirofano.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);
        siUrgente.addKeyListener(keyListenerEscape);
        noUrgente.addKeyListener(keyListenerEscape);
        agregarProfesionalesBoton.addKeyListener(keyListenerEscape);
    }

    private void cerrarVentana() {
        JDialog jdialog = (JDialog)
                this.getParent().getParent().getParent().getParent().
                getParent().getParent().getParent().getParent();
        jdialog.dispose();
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JScrollPane ComentariosDescripcionScrollPane;
    private javax.swing.JButton agregarProfesionalesBoton;
    private javax.swing.JTextArea descripcion;
    private com.toedter.calendar.JDateChooser fechaFin;
    private com.toedter.calendar.JDateChooser fechaInicio;
    private javax.swing.JSpinner horaFin;
    private javax.swing.JSpinner horaInicio;
    private javax.swing.JRadioButton noUrgente;
    private javax.swing.JSpinner numeroQuirofano;
    private javax.swing.JPanel panelProfesionales;
    private javax.swing.JScrollPane panelProfesionalesScrollPane;
    private javax.swing.JPanel panelTratamientoQuirurgico;
    private javax.swing.JRadioButton siUrgente;
    private javax.swing.JLabel textoDescripcion;
    private javax.swing.JLabel textoHoraYFechaFin;
    private javax.swing.JLabel textoHoraYFechaInicio;
    private javax.swing.JLabel textoNumeroQuirofano;
    private javax.swing.JLabel textoProfesionales;
    private javax.swing.JLabel textoUrgente;
    // End of variables declaration//GEN-END:variables
    private Object[][] datosProfesionalesTratamientoQuirurgico;
    private Object[] datosGeneralTratamientQuirurgico;
    private TratamientoQuirurgico tratamientoQuirurgico;
}
